﻿/* 带选中状态的按钮扩展控件
 *   可标记该按钮是否选中，以不同颜色区分
 *   可设置选中时和未选中时的按钮背景色
 */

/*待测试*/
namespace LSLib.Windows.Forms.ControlEx
{
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;

    public class ucCheckButton : Button
    {
        #region 组件设计器生成的代码
        /// <summary> 
        /// 必需的设计器变量。
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary> 
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源，为 true；否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        /// <summary> 
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            components = new System.ComponentModel.Container();
        }

        #endregion

        public ucCheckButton()
        {
            InitializeComponent();
        }

        #region 定义字段
        private bool m_IsChecked = false;
        private Color m_UnCheckedBackColor;
        private Color m_CheckedBackColor;
        private Color M_DefaultCheckedBackColor = Color.FromArgb(128, 255, 255);
        #endregion

        #region 定义属性
        [Description("按钮是否处于选中状态")]
        public bool IsChecked
        {
            get { return m_IsChecked; }
            set
            {
                m_IsChecked = value;
                this.ChangeBackColor();
            }
        }

        [Description("按钮未选中时的背景色")]
        public Color UnCheckedBackColor
        {
            get
            {
                if (m_UnCheckedBackColor.Equals(Color.Empty))
                    return this.BackColor;
                else
                    return m_UnCheckedBackColor;
            }
            set
            {
                m_UnCheckedBackColor = value;
                this.ChangeBackColor();
            }
        }

        [Description("按钮选中时的背景色")]
        public Color CheckedBackColor
        {
            get
            {
                if (m_CheckedBackColor.Equals(Color.Empty))
                    return M_DefaultCheckedBackColor;
                else
                    return m_CheckedBackColor;
            }
            set
            {
                m_CheckedBackColor = value;
                this.ChangeBackColor();
            }
        }
        #endregion

        #region 重写事件
        protected override void OnClick(EventArgs e)
        {
            this.IsChecked = !this.IsChecked;
            base.OnClick(e);
        }
        #endregion

        #region 私有函数
        private void ChangeBackColor()
        {
            this.BackColor = (this.IsChecked) ? this.CheckedBackColor : this.UnCheckedBackColor;
        }
        #endregion
    }
}
